package common

import (
	"net/url"
	"strings"
)

// 多个为true才返回true
func And(isTrue ...bool) bool {
	for _, v := range isTrue {
		if !v {
			return false
		}
	}
	return true
}
func Eq(a, b string) bool {
	return a == b
}

func If(isTrue bool, a, b string) string {
	if isTrue {
		return a
	}
	return b
}

// 判断是否是数字或者字符串
func IsNumberOrString(str1 string) bool {
	return IsNumber(str1) || IsString(str1)
}

// 判断是否是数字或者字符串或者字符
func IsNumberOrStringOrChar(str1 string) bool {
	return IsNumber(str1) || IsString(str1) || IsChar(str1)
}

// 判断是否空字符串
func IsEmpty(str string) bool {
	if str == "" {
		return true
	}
	return false
}

// 判断是否是字符串
func IsString(str string) bool {
	if strings.HasPrefix(str, "\"") && strings.HasSuffix(str, "\"") {
		return true
	}
	return false
}

// 判断是否是字符
func IsChar(str string) bool {
	if strings.HasPrefix(str, "'") && strings.HasSuffix(str, "'") {
		return true
	}
	return false

}

// 判断是否是数字或者小数,包括负数
func IsNumber(str1 string) bool {
	//判断开头是否是负号
	if strings.HasPrefix(str1, "-") {
		str1 = str1[1:]
	}
	var pd = false
	length := len(str1)
	for i := 0; i < length; i++ {
		var str = string(str1[i])
		if str == "0" || str == "1" || str == "2" || str == "3" || str == "4" || str == "5" || str == "6" || str == "7" || str == "8" || str == "9" {
			pd = true
			continue
		}
		//如果是小数
		if str == "." && IsNumber(str1[i+1:]) {
			pd = true
			break
		}
		//如果都不是那么就不是数字
		pd = false
		break
	}
	return pd
}

// 判断是否是小数
func IsFloat(str1 string) bool {
	var pd = false
	//判断是否存在小数点
	if strings.Contains(str1, ".") {
		//如果存在小数点,那么就判断是否是数字
		if IsNumber(str1) {
			pd = true
		}
	}
	return pd
}

// 判断是否是整数
func IsInt(str1 string) bool {
	var pd = false
	//判断是否存在小数点
	if !strings.Contains(str1, ".") {
		//如果不存在小数点,那么就判断是否是数字
		if IsNumber(str1) {
			pd = true
		}
	}
	return pd
}

// 判断是否是布尔值true,false
func IsBool(str1 string) bool {
	if str1 == "true" || str1 == "false" {
		return true
	}
	return false
}

// 返回布尔值, 如果是true,那么返回true,否则返回false,如果是数字,那么判断是否是0,如果是0,那么返回false,否则返回true
func IsTrue(str1 string) bool {
	if str1 == "true" {
		return true
	}
	if IsNumber(str1) {
		if str1 == "0" {
			return false
		}
		return true
	}
	return false
}

// 判断是否是26个字母和_,支持大小写
func IsLetter(str1 string) bool {
	//转换成小写
	str1 = strings.ToLower(str1)
	length := len(str1)
	var pd = false
	for i := 0; i < length; i++ {
		var str = string(str1[i])
		if str == "a" || str == "b" || str == "c" || str == "d" || str == "e" || str == "f" || str == "g" ||
			str == "h" || str == "i" || str == "j" || str == "k" || str == "l" || str == "m" || str == "n" ||
			str == "o" || str == "p" || str == "q" || str == "r" || str == "s" || str == "t" || str == "u" ||
			str == "v" || str == "w" || str == "x" || str == "y" || str == "z" || str == "_" {
			pd = true
		}
	}

	return pd
}

// 判断字符串是否是http或者https开头的url地址格式
func IsUrl(str1 string) bool {
	if strings.HasPrefix(str1, "http://") || strings.HasPrefix(str1, "https://") {
		//url.Parse
		parsedURL, err := url.Parse(str1)
		if err != nil {
			return false
		}
		return parsedURL.Scheme != "" && parsedURL.Host != ""
	}
	return false
}
